#ifndef ENGINE_H
#define ENGINE_H

class Engine {

public:
    //инициализация класса и построение матрицы
    Engine(int M, int N,int seed0, int a, int b, int m, double start);
    ~Engine();

    //вывод матрицы на экран
    void printToScreen();
    void printToScreen(int **matrix, int a,int b);

    /*
        решить методом
        http://dsalgo.blogspot.com/2008/05/max-sum-sub-matrix.html
    */
    void solve1();

    /*
1717 решается например так:
Посортить вершины по x, перебрать левую границу прямоугольника x1, внутри завести дерево отрезков по y, где в каждой вершине для подотрезка хранить: сумму функций на отрезке, сумму на лучшем подотрезке, сумму лучшего подотрезка начинающегося в левой границе и заканчивающегося раньше правой, сумму лучшего подотрезка начинающегося раньше правой границы и заканчивающегося в ней, последнее 2 отдельно для 1 и >= 2 команд. После того как выбрали левую границу и завели дерево надо по очереди делать следующее: прорелаксировать все вершины с первым нерассмотренным x >= x1, узнать ответ (лучший подотрезок корня для >= 2 команд).
      */

private:
    int M;
    int N;
    int **A;

    double start; //время старта

    int PRNG(int &seed, int a, int b, int m);

};

#endif // ENGINE_H

